﻿// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"
#include "stdio.h"

UnityLogType unitylog = nullptr;

int add(int a, int b)
{
	return a + b;
}

int minus(int a, int b)
{
	return a - b;
}

int multiply(int a, int b)
{
	return a * b;
}

double divide(int a, int b)
{
	double m = (double)a / b;
	return m;
}

wchar_t* upper(wchar_t *content) {
	wchar_t* origin = content;
	for (; *content != '\0'; content++)
	{
		*content = towupper(*content);
	}
	return origin;
}

// 在函数参数中使用 const 告诉编译器，函数内部不会修改传入的字符串。
// 加了Const之后，在参数中才能随意写字符串。
// 然后在把const wchar_t* 转化成wchar_t *
void call_unity_log(const char *log) {
	if (unitylog != nullptr)
	{
		char* l = const_cast<char *>(log);
		unitylog(l);
	}
}

void set_unity_log_func(UnityLogType ulog)
{
	// 设置CSharp端传过来的log函数
	unitylog = ulog;
	
	// log 函数只是将传入的字符串打印到控制台，没有涉及动态内存分配，
	// 因此不会引起内存泄漏。每次调用 log("message") 时，
	// 相关的栈上的数据都会在函数结束时自动释放。
	call_unity_log("set call back finish");
}

